package com.hooya.fa.eu.biz.dao.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.hooya.fa.eu.api.bo.HsCodeBO;
import com.hooya.fa.eu.api.bo.MetaStkCustomsBO;
import com.hooya.fa.eu.api.bo.SkuLastPriceBO;
import com.hooya.fa.eu.api.bo.SkuPriceInfoBO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;

import java.util.List;
import java.util.Set;

/**
 * @Description 1
 * @Author : Zongz
 * @Copyright Copyright (c) 豪雅集团
 * @Create 2023/11/29
 * @Version 1.0.0
 */
@Mapper
public interface MetaRelationMapper extends BaseMapper {

    //2025-03-12香港公司invoicedate不再加一
    @Select("SELECT lower(corp) corp FROM fa_eu.meta_corp_header WHERE country = 'China'")
    List<String> getCorpHeaderByCountry();

    /**
     * data: 不同货权分组，并且不同货权的数据按照 日期离endDate最近，数量最大，金额最大，三个条件筛选出来
     * description: 主要用于筛选出口价格，对于一部分买卖记录得数据，
     * 通过产品编号和货权（belongs）找到日期离endDate最近，数量最大，并且金额最大的进口（海关）税
     * 如果买卖记录只能通过产品编号匹配出来，那么就是不管货权，还是根据日期离endDate最近，数量最大，并且金额最大作为海关税
     *
     * @param endDate
     * @return
     */
    List<MetaStkCustomsBO> getListByCondition(@Param("endDate") String endDate);

    /**
     * 转运业务，与getListByCondition(String endDate)基本一致，只是diffDate的差值算法不一致
     *
     * @return
     */
    List<MetaStkCustomsBO> getListByCondition4Zy(@Param("startDte") String startDte, @Param("endDate") String endDate);

    /**
     * 获取hsCode，sku和belongs分组
     *
     * @return
     */
    List<HsCodeBO> getSkuHsCodeList();

    @Select("SELECT sku, substring_index(group_concat(price ORDER BY invoiceDate desc),',',1) price FROM meta_stk_customs group by sku")
    List<SkuLastPriceBO> getSkuLastPrice();

    /**
     * 以sku、货权为分组，获取最新价格
     *
     * @param skuList sku列表
     * @return list
     */
    List<SkuLastPriceBO> getSkuLastPriceByBelongs(@Param("skuList") Set<String> skuList);

    /**
     * 根据sku获取sku价格信息
     *
     * @param skuList sku列表
     * @return list
     */
    List<SkuPriceInfoBO> getListBySkuList(@Param("skuList") List<String> skuList);
}
